#ifndef  PID_H
#define PID_H
#include "stm32f10x.h"                  // Device header
typedef struct {
    // 原有参数
    float kp, ki, kd, dt;
    float integral_max, integral_min;
    float output_max, output_min;

    float integral;
    float previous_error;// 注：当启用斜坡后，这个变量保存的是每个斜坡的error，慎外用
	float error;		 //用来保存真实的error
    float target;        // 用户设定的目标（最终目标）
    float setpoint;      // 实际传给 PID 的目标（当前目标）
    float output;

    // 新增：目标斜坡参数
    float ramp_step;     // 每次增加的目标步长（如 5.0f RPM）
    uint8_t ramp_enable; // 是否启用斜坡
	
	float integral_damping_ratio;   // 积分突释时衰减积分，典型值 0.3f
    float previous_measurement;
} PIDController;
void pid_init(PIDController *c,
              float kp, float ki, float kd, float dt,
              float imax, float imin,
              float omax, float omin);
void pid_set_target(PIDController *c,float target);
float pid_update(PIDController *c, float now);
void pid_enable_ramp(PIDController *c, uint8_t enable);
void pid_set_ramp_step(PIDController *c, float step);
#endif
